جزوه · فصل پنجم · جلسه ۵۴ · مدیریت سرویس‌ها ← بازگشت به فهرست
📘 فصل پنجم · جلسه ۵۴ مدیریت سرویس‌ها در لینوکس
📅 تاریخ: چهارشنبه، ۲۸ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat (AlmaLinux)
این جلسه از مهم‌ترین مباحث امتحانی است. حتماً تفاوت systemd و SysVinit را با هم مقایسه کنید.
🚀 قبل از شروع، یه مثال ساده:

فرض کن یه هتل بزرگ داری که توش کلی اتاق (سرویس) هست. هر اتاق باید در زمان مشخصی باز و بسته بشه. توی سیستم‌های قدیمی (SysVinit)، این کار با یه سری اسکریپت (مثل لیست کاغذی) انجام می‌شد. توی سیستم‌های جدید (systemd)، مدیریت با یه نرم‌افزار هوشمند (systemctl) انجام می‌شه که خیلی سریع‌تر و منعطف‌تره. این جلسه دقیقاً همینه!

▍ مقدمه

پس از بارگذاری هسته (Kernel)، اولین پردازشی که اجرا می‌شود، init است. این پردازش با PID 1 شناسایی می‌شود و مسئولیت راه‌اندازی و مدیریت تمام سرویس‌های سیستم را بر عهده دارد. در طول تاریخ، دو روش اصلی برای این کار وجود داشته است: SysVinit (قدیمی) و systemd (جدید).

┌──(ya3in㉿kali)-[~] └─$ ps -p 1 PID TTY TIME CMD 1 ? 00:00:06 systemd

توضیح: با ps -p 1 می‌توانید ببینید که اولین پردازش در سیستم شما systemd است (در توزیع‌های جدید) یا init (در توزیع‌های قدیمی).

PID 1 همیشه اولین پردازش است. در systemd نام آن systemd و در SysVinit نام آن init است.

▍ ساختار systemd (جدید)

systemd مدیر سرویس‌های پیش‌فرض در اکثر توزیع‌های مدرن لینوکس است. این سیستم از Unitها برای مدیریت همه چیز استفاده می‌کند.

• Unitها در systemd

هر چیزی که systemd مدیریت می‌کند، یک Unit است. انواع مختلف Unitها عبارتند از:

┌──(ya3in㉿kali)-[~] └─$ systemctl list-units --type=service | head -10

توضیح: systemctl list-units همه Unitهای فعال را نمایش می‌دهد. با --type=service فقط سرویس‌ها را نشان می‌دهد.

• Targetها (اهداف)

Targetها گروه‌هایی از سرویس‌ها هستند که با هم راه‌اندازی می‌شوند. معادل Runlevelها در SysVinit هستند.

نام Target توضیح
graphical.target سیستم با رابط گرافیکی (GUI) و شبکه
multi-user.target سیستم با شبکه اما بدون GUI (چند کاربره)
rescue.target حالت امداد (تک‌کاربره)
poweroff.target خاموش کردن سیستم
reboot.target ری‌استارت سیستم
┌──(ya3in㉿kali)-[~] └─$ systemctl get-default graphical.target

توضیح: systemctl get-default Target پیش‌فرض سیستم را نشان می‌دهد.

تفاوت graphical.target و multi-user.target: اولی با GUI و دومی بدون GUI است.

• فایل‌های سرویس systemd

فایل‌های سرویس در /lib/systemd/system/ یا /etc/systemd/system/ قرار دارند و از سه بخش اصلی تشکیل شده‌اند:

┌──(ya3in㉿kali)-[~] └─$ systemctl cat ssh # /lib/systemd/system/ssh.service [Unit] Description=OpenBSD Secure Shell server After=network.target auditd.service [Service] ExecStart=/usr/sbin/sshd -D ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target

توضیح: systemctl cat ssh محتوای فایل سرویس ssh.service را نمایش می‌دهد.

بخش‌های مهم فایل سرویس:
  • After= → سرویس بعد از این سرویس‌ها شروع شود.
  • WantedBy= → سرویس توسط کدام Target مدیریت می‌شود.
  • ExecStart= → دستور شروع سرویس.
  • Type= → نوع سرویس (forking, notify, simple, etc.)

• وضعیت سرویس‌ها (STATE)

هر فایل سرویس یک STATE دارد که مشخص می‌کند در زمان بوت چه اتفاقی برای آن می‌افتد:

STATE توضیح
enabled سرویس در زمان بوت به‌طور خودکار شروع می‌شود.
disabled سرویس در زمان بوت شروع نمی‌شود.
static سرویس فقط در صورت وابستگی سرویس دیگر شروع می‌شود یا می‌توان به‌صورت دستی شروع کرد.
masked سرویس به‌طور کامل غیرفعال است و حتی نمی‌توان آن را به‌صورت دستی شروع کرد.
┌──(ya3in㉿kali)-[~] └─$ systemctl list-unit-files --type=service | head -10

توضیح: systemctl list-unit-files وضعیت (STATE) همه فایل‌های سرویس را نمایش می‌دهد.

تفاوت enabled و disabled: enabled یعنی سرویس در بوت شروع می‌شود، disabled یعنی شروع نمی‌شود.

▍ ساختار SysVinit (قدیمی)

SysVinit سیستم مدیریت سرویس‌های قدیمی است که هنوز در برخی توزیع‌ها استفاده می‌شود. این سیستم از Runlevelها و اسکریپت‌های /etc/init.d/ استفاده می‌کند.

• Runlevelها

Runlevelها وضعیت‌های مختلف سیستم را تعیین می‌کنند:

Runlevel توضیح
0 خاموش کردن سیستم
1 (S) حالت تک‌کاربره (تعمیر)
2 چند کاربره بدون شبکه
3 چند کاربره با شبکه
4 سفارشی (Custom)
5 چند کاربره با GUI
6 ری‌استارت سیستم
Runlevel 3: چند کاربره با شبکه (بدون GUI) — معادل multi-user.target در systemd.
Runlevel 5: چند کاربره با GUI — معادل graphical.target در systemd.

• مدیریت سرویس‌ها در SysVinit

در SysVinit، سرویس‌ها با دستور service مدیریت می‌شوند و اسکریپت‌های آنها در /etc/init.d/ قرار دارند.

┌──(ya3in㉿kali)-[~] └─$ service httpd status httpd is stopped └─$ service httpd start Starting httpd: [ OK ]

توضیح: service httpd status وضعیت سرویس را نشان می‌دهد و service httpd start آن را شروع می‌کند.

• فعال‌سازی سرویس در SysVinit

برای فعال کردن سرویس در زمان بوت، از chkconfig یا لینک‌های سمبلیک در /etc/rc.d/ استفاده می‌شود.

┌──(ya3in㉿kali)-[~] └─$ chkconfig httpd on └─$ chkconfig --list httpd

توضیح: chkconfig httpd on سرویس را در Runlevelهای پیش‌فرض فعال می‌کند.

در SysVinit، از service برای مدیریت سرویس‌ها و از chkconfig برای فعال‌سازی در بوت استفاده می‌شود.

▍ مقایسه systemd و SysVinit

🔵 systemd (جدید)

  • دستور اصلی: systemctl
  • فایل‌های سرویس: .service در /lib/systemd/system/
  • مدیریت وابستگی: After, Before, Wants, Requires
  • Targetها: graphical.target, multi-user.target
  • اجرای موازی سرویس‌ها (سریع‌تر)

🔴 SysVinit (قدیمی)

  • دستور اصلی: service و chkconfig
  • اسکریپت‌ها: /etc/init.d/
  • مدیریت وابستگی: ترتیب اعداد در Runlevelها
  • Runlevelها: 0-6
  • اجرای ترتیبی سرویس‌ها (کندتر)

▍ دستورات خاموش‌سازی سیستم

دستور توضیح
halt تمام فرآیندها را متوقف کرده و CPU را خاموش می‌کند (اما برق را قطع نمی‌کند).
poweroff تمام فرآیندها را متوقف کرده، CPU را خاموش و به سخت‌افزار سیگنال قطع برق می‌فرستد.
reboot سیستم را ری‌استارت می‌کند.
shutdown با گزینه‌های مختلف، سیستم را خاموش یا ری‌استارت می‌کند (مثلاً shutdown -h now).
تفاوت halt و poweroff: halt فقط CPU را متوقف می‌کند، اما poweroff به سخت‌افزار نیز سیگنال قطع برق می‌فرستد.
✅ جمع‌بندی نهایی برای امتحان:
  • systemd: systemctl (start, stop, status, enable, disable)
  • SysVinit: service (start, stop, status) و chkconfig (on, off)
  • Targetها (systemd): graphical.target (GUI) و multi-user.target (بدون GUI)
  • Runlevelها (SysVinit): 3 (چند کاربره با شبکه) و 5 (چند کاربره با GUI)
  • STATEها: enabled (فعال در بوت)، disabled (غیرفعال در بوت)، static (وابسته به دیگران)
  • PID 1: در systemd = systemd، در SysVinit = init
  • دستورات خاموش‌سازی: poweroff (خاموشی کامل)، reboot (ری‌استارت)، halt (توقف CPU)